package com.internetCafes.spms.web.customer.service.impl.dict;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.internetCafes.spms.web.customer.common.cont.EntDictValueConst;
import com.internetCafes.spms.web.customer.entity.dict.EntDictValue;
import com.internetCafes.spms.web.customer.mapper.dict.EntDictValueMapper;
import com.internetCafes.spms.web.customer.model.dict.EntDictCodeListPo;
import com.internetCafes.spms.web.customer.model.dict.EntDictValueDo;
import com.internetCafes.spms.web.customer.service.dict.IEntDictValueService;
import com.sms.common.util.hutool.core.collection.CollectionUtil;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>
 * 企业字典值表 服务实现类
 * </p>
 *
 * @author Zj
 * @since 2021-11-19
 */
@Service
public class EntDictValueServiceImpl extends ServiceImpl<EntDictValueMapper, EntDictValue> implements IEntDictValueService {

    /**
     * 字典表值分页方法
     *
     * @param page           分页对象
     * @param entDictValueDo 分页请求条件
     */
    @Override
    public List<EntDictValue> pagingPo(Page<EntDictValue> page, EntDictValueDo entDictValueDo) {
        return baseMapper.pagingPo(page, entDictValueDo);
    }

    /**
     * 整合展示字典值表
     */
    @Override
    public List<EntDictCodeListPo> entDictCodeList() {
        List<EntDictCodeListPo> dictList = baseMapper.entDictCodeList();

        if (CollectionUtil.isNotEmpty(dictList)) {
            List<String> dictCodeList = dictList.stream()
                    .map(EntDictCodeListPo::getDictCode)
                    .collect(Collectors.toList());
            LambdaQueryWrapper<EntDictValue> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.in(EntDictValue::getDictCode, dictCodeList)
                            .eq(EntDictValue::getStatusId, EntDictValueConst.Status.ENABLE.getId());

            Map<String, String> valueGroupByDictCode = list(queryWrapper)
                    .stream()
                    .collect(Collectors.groupingBy(EntDictValue::getDictCode, Collectors.mapping(EntDictValue::getName, Collectors.joining("、"))));
            for (EntDictCodeListPo po : dictList) {
                po.setDictNames(
                        valueGroupByDictCode.getOrDefault(po.getDictCode(), ""));
            }
        }
        return dictList;
    }

    /**
     * 修改字典值状态
     * @param idList id列表
     * @param statusId 状态码id
     * @return 是否修改成功
     */
    @Override
    public boolean updateStatus(List<Long> idList, Integer statusId) {
        LambdaUpdateWrapper<EntDictValue> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.in(EntDictValue::getId, idList)
                .set(EntDictValue::getStatusId, statusId);
        return update(updateWrapper);
    }

}
